開始介紹前,先說說在好想學習時要培養查閱規範(Specification)的習慣,例如ECMAScript或是MDN,這些都是第一手資訊。MDN也推薦看英文版,因為英文版跟中文版會有不同,英文版比較詳細~所以這30天主要參考來源都來自MDN規範,連結也會一併放在最後的參考資料方便查找。
變數就像是一個的容器,隨時存取裡面的資料。
變數命名規則:
_
、錢字號$
,不能使用數字開頭。class
、function
等。常見JS變數命名方式:
MyHeight
TotalPrice
userName
myHomePage
_
連接單字,每個單字開頭字母皆小寫。user_name
my_home_page
在JavaScript 中的資料型別分成兩大類:基本型別(Primitive types)和物件型別(Object types)。
基本型別是不可變(immutable)的值,如創造變數並賦值,此值就不可變,若有修改、刪除等變更則回傳新值。
JavaScript 的7種基本型別:
Number
數值:包含整數和浮點數,例如:7、3.14String
字串:文字資料,例如:"Hello"Boolean
布林值:值只有 true 或 falseUndefined
:變數被宣告但未賦值時,預設值是 undefinedNull
:表示「空」或「現在沒有值」Symbol
:一種唯一且不可變的值BigInt
:提供比 Number 型別更大範圍的整數,例如:123n嘗試修改字串第一個字母,字串並沒有變更,因為基本型別為不可變(immutable)。
let str = "hello world";
str[0] = "H"; //第一個字母h改成H
console.log(str); // hello world,第一個字母沒有變
當修改基本型別的值,則會創造一個新值,並把變數「指向」新值。
let name = "Peter";
name = "David";
console.log(name); // "David"
所以原本的"Peter"並沒有被修改,而是創造新值"David",重新賦值給變數name。
基本型別以外的都是物件型別,物件型別是可變(mutable)的,能儲存多個值和複雜資料結構。
Object
:複合型別,用來儲存多個屬性和方法Array
:用來儲存有序的資料列表Function
:一種特殊物件,可以被呼叫執行程式碼Date
:用來處理時間和日期RegExp
:正規表達式,將文字與模式進行比對typeof
判斷console.log(typeof 7); // "number"
console.log(typeof "Jeshua"); // "string"
console.log(typeof true); // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object" (歷史中的bug);
console.log(typeof [1,2,3]); // "object"
console.log(typeof {a: 5}); // "object"
console.log(typeof function(){}); // "function"
注意:typeof
回傳的是「字串」!之前都沒注意到XD
typeof
無法辨別物件,例如:Array回傳"object"
而不是"Array"
。function
回傳是"function"
,其實function是屬於特殊物件,是可以被呼叫的物件,因此屬於物件。
MDN:
The Function object provides methods for functions. In JavaScript, every function is actually a Function object.
剛剛typeof
判斷陣列時,會得到"object"
,那如果要準確判斷陣列要怎麼處理?
可以使用Array.isArray()
方法,來判斷是否為陣列,例如:
console.log(Array.isArray([5, 7])); // true
console.log(Array.isArray([])); // true
console.log(Array.isArray("Elijah")); // false
console.log(Array.isArray({a: 1})); // false
console.log(Array.isArray(123)); // false
返回布林值:true,表示該值是陣列,false 則表示不是。
MDN - JavaScript data types and data structures
MDN - Reserved words保留字
重新認識 JavaScript: Day 03 變數與資料型別
重新認識 JavaScript: Day 04 物件、陣列以及型別判斷
wikipedia - 駝峰式大小寫
wikipedia - 蛇型命名法
上次跟Chris討論到的,超酷的fun fact!
Array.isArray(Array.prototype); //true